# This is a BitKeeper generated patch for the following project:
# Project Name: Linux kernel tree
# This patch format is intended for GNU patch command version 2.5 or higher.
# This patch includes the following deltas:
#	           ChangeSet	1.930.45.1 -> 1.930.45.2
#	drivers/hotplug/acpiphp_glue.c	1.3     -> 1.3.1.1
#
# The following is the BitKeeper ChangeSet Log
# --------------------------------------------
# 03/02/24	trond.myklebust@fys.uio.no	1.930.46.1
# [PATCH] Fix XID allocation race in 2.4.21-pre4
# 
# Hi Marcel,
# 
# Olaf discovered that the XID allocation in net/sunrpc/xprt.c was not
# entirely protected against SMP races. The following patch adds
# spinlocking in order to fix the issue. Please apply ASAP...
# 
# Cheers
#   Trond
# --------------------------------------------
# 03/02/24	ink@jurassic.park.msu.ru	1.930.46.2
# [PATCH] alpha update
# 
# Hi Marcelo,
# 
# here's mostly the same stuff that I sent in a last couple of weeks:
# - Nautilus/UP1500 update;
# - ndelay() implementation;
# 
# Also, from Jeff.Wiedemeier@hp.com:
# - properly handle NUMA nodes without memory in setup_memory();
# - fix "maxcpus=" command line arg breakage;
# - fix NULL pointer dereference in core_marvel.c
# 
# Ivan.
# --------------------------------------------
# 03/02/24	marcelo@freak.distro.conectiva	1.930.37.5
# Merge http://jfs.bkbits.net/linux-2.4
# into freak.distro.conectiva:/home/marcelo/bk/linux-2.4
# --------------------------------------------
# 03/02/24	rusty@rustcorp.com.au	1.930.37.6
# [PATCH] available spell fixes
# 
# From:  <alfre@ibd.es>
# 
#   Against vanilla 2.4.20, spell fixes for 'available'.
# 
#   Regrads - alfredo
# 
#   --
#   Alfredo Sanjuan
#   <alfre@ibd.es>
# --------------------------------------------
# 03/02/24	mikal@stillhq.com	1.930.37.7
# [PATCH] Handle scsi_register() failure
# 
#   This patch has been generated as part of my scsi_register audit of the 2.5.45 kernel tree. scsi_register() can fail, returning a NULL pointer, and the failure case was not being handled here...
# --------------------------------------------
# 03/02/24	rusty@rustcorp.com.au	1.930.37.8
# [PATCH] correct description of Griffin Powermate
# 
# [ Indeed, the website says "Made of high-quality machined aluminum..." ]
# 
# From:  Michael Shields <shields@msrl.com>
# --------------------------------------------
# 03/02/24	rusty@rustcorp.com.au	1.930.37.9
# [PATCH] namespace pollution in eth bridge driver
# 
# (Included in 2.5)
# From:  Arnd Bergmann <arnd@bergmann-dalldorf.de>
# 
#   A global variable should not be called 'ioctl_mutex',
#   this makes it static.
#   ===== net/bridge/br_ioctl.c 1.1 vs edited =====
# --------------------------------------------
# 03/02/24	rusty@rustcorp.com.au	1.930.37.10
# [PATCH] drivers_net_wan_sdla_x25.c, typo: the the
# 
# (Included in 2.5)
# From:  James Mayer <james@cobaltmountain.com>
# --------------------------------------------
# 03/02/24	rusty@rustcorp.com.au	1.930.37.11
# [PATCH] Bug in "sys_init_module", kernel_module.c, 2.4.19
# 
# [ Keith, is this correct? ]
# From:  Kingsley Cheung <kingsley@aurema.com>
# 
#   Hi,
# 
#   I've a trivial patch against kernel/module.c for 2.4.19 below that
#   fixes a problem with the initialisation of a stack of modules.
#   Though it rarely occurs, without this the kernel can crash when a module
#   is being initialised and before this initialisation finishes another
#   *dependent* module is loaded.  This occurs when the first module blocks
#   in init_module and releases the big kernel lock.  I discussed this earlier
#   with Keith Owens but it looks like its been forgotten:
# 
#   On Mon, 5 Aug 2002, Keith Owens wrote:
# 
#   > On Mon, 5 Aug 2002 17:25:21 +1000 (EST),
#   > Kingsley Cheung <kingsley@aurema.com> wrote:
#   > >Anyway, at this point I'm still not certain I've completely grasped your
#   > >reply. Maybe I didn't make my first email clear.  If this is so, then
#   > >what I was saying is that the invocation of "init_module" functions of
#   > >*dependent* modules needs be appropriately serialised.  Right now
#   > >"sys_init_module" is relying on the big kernel lock to completely
#   > >serialise these calls but if any "init_module" function blocks, the
#   > >kernel lock is released and this serialisation can be broken.  Maybe one
#   > >way to avoid this is to check the flags of modules depended on during
#   > >"sys_init_module". So if the MOD_RUNNING flag is not set for the module
#   > >we depend on, then the module currently being loaded must have its
#   > >invocation of "sys_init_module" wait or return an appropriate error
#   > >indicating why.
#   >
#   > Agreed, this is a bigger problem than a failed module_init().  I am
#   > going to think about this overnight.
#   >
# 
#   Cheers,
#   Kingsley
# --------------------------------------------
# 03/02/24	rusty@rustcorp.com.au	1.930.37.12
# [PATCH] es1372.c doesn't free resources correctly
# 
# From:  Marcus Alanen <maalanen@ra.abo.fi>
# 
# 
#   ---------- Forwarded message ----------
#   Date: Mon, 1 Jul 2002 22:29:35 +0300 (EEST)
#   From: Marcus Alanen <maalanen@tuxedo.abo.fi>
#   To: Alan Cox <alan@lxorguk.ukuu.org.uk>, jgarzik@mandrakesoft.com,
#        t.sailer@alumni.ethz.ch
#   Subject: [patch] es1371.c doesn't free resources correctly
# 
#   es1371_probe() doesn't free resources correctly if something fails.
# 
#   Compiled, not tested. Kernels 2.4 & 2.5.
# 
#   ===== es1371.c 1.10 vs edited =====
# --------------------------------------------
# 03/02/24	rusty@rustcorp.com.au	1.930.37.13
# [PATCH] Typos in drivers_s390_net_iucv.c
# 
# (Included in 2.5)
# From:  James Mayer <james@cobaltmountain.com>
# --------------------------------------------
# 03/02/24	schwidefsky@de.ibm.com	1.930.37.14
# [PATCH] s390 base architecture update
# 
# s/390 base architectures changes:
#  - Fix return code handling of copy_to_user().
#  - Add missing system calls: gettid, readahead and tkill.
#  - Fix oops in program check handler after crypto operation exceptions.
#  - Fix set_fs value after fork. A new process that has a signal pending
#    before it ever has been to userspace will crash.
#  - Fix endless trap loop after exit from /linuxrc.
#  - Added missing check for SIGURG in signal handler.
#  - Fix oops in fixup routine of copy_to_user/copy_from_user.
#  - Adapt to latest path group id algorithm.
#  - Fix ascii to ebcdic conversion. Strings with size n*256+1 are not
#    converted correctly.
#  - Fix tlb flushing in multithreaded programs (race on cpu_vm_mask).
#  - Clear _PAGE_ISCLEAN bit in pte_mkwrite.
#  - Fixes for compiling with gcc 3.3:
#    * inline assembly constraints in _syscall[0-5] macros.
#    * initialize .bss segment before using it.
#  - Change size of invalid opcode in BUG() from 2 bytes to 4 bytes.
#  - Remove annoying 'new level' message from debug feature.
#  - Add pfix support. This allows to pin page while running under VM.
# --------------------------------------------
# 03/02/24	schwidefsky@de.ibm.com	1.930.37.15
# [PATCH] xpram driver fix for 64-bit
# 
# xpram_sizes has to be of type 'unsigned int' or xpram won't work on 64 bit.
# --------------------------------------------
# 03/02/24	schwidefsky@de.ibm.com	1.930.37.16
# [PATCH] s390 idals.h update
# 
# New idal support functions. The extended idals.h adds support for idal buffers
# and removes some deprecated functions.
# --------------------------------------------
# 03/02/24	rusty@rustcorp.com.au	1.930.37.17
# [PATCH] i2c ID addition
# 
# From:  Ronald Bultje <rbultje@ronald.bitfreak.net>
# 
#   Dear Marcello,
# 
#   for a driver, I need an i2c ID in include/linux/i2c-id.h which isn't in
#   there yet. The ID is there in 2.5.x, but not in 2.4.x. Could this ID
#   please be added? Patch is against 2.4.20-pre9.
# --------------------------------------------
# 03/02/24	eranian@frankl.hpl.hp.com	1.930.44.2
# ia64: perfmon update
# 
# This one does:
#         - some more clean-ups on inline asm()
#         - update copyright
#         - fix bug in sys_perfmonctl(), system calls return long not int (important)
#         - fix a bug in the PMU interrupt handler
#         - some ANSI C clean for initialized structs
# --------------------------------------------
# 03/02/24	bjorn_helgaas@hp.com	1.930.44.3
# ia64: update defconfigs
# --------------------------------------------
# 03/02/24	bjorn_helgaas@hp.com	1.930.44.4
# Merge hp.com:/home/helgaas/bk/to-marcelo-2.4
# into hp.com:/home/helgaas/bk/linux-ia64-2.4
# --------------------------------------------
# 03/02/24	bjorn_helgaas@hp.com	1.930.44.5
# Merge hp.com:/home/helgaas/bk/ia64-extras
# into hp.com:/home/helgaas/bk/linux-ia64-2.4
# --------------------------------------------
# 03/02/24	willy@fc.hp.com	1.930.45.2
# Make ACPI hot-plug controller detection check _CID in adddition to _HID.
# --------------------------------------------
#
diff -Nru a/drivers/hotplug/acpiphp_glue.c b/drivers/hotplug/acpiphp_glue.c
--- a/drivers/hotplug/acpiphp_glue.c	Wed Oct  8 09:10:06 2003
+++ b/drivers/hotplug/acpiphp_glue.c	Wed Oct  8 09:10:06 2003
@@ -747,8 +747,9 @@
 
 
 /* find hot-pluggable slots, and then find P2P bridge */
-static int add_bridges (acpi_handle *handle)
+static int add_bridge(struct acpi_device *device)
 {
+	acpi_handle *handle = device->handle;
 	acpi_status status;
 	unsigned long tmp;
 	int seg, bus;
@@ -802,36 +803,6 @@
 }
 
 
-/* callback routine to enumerate all the bridges in ACPI namespace */
-static acpi_status
-find_host_bridge (acpi_handle handle, u32 lvl, void *context, void **rv)
-{
-	acpi_status status;
-	acpi_device_info info;
-	char objname[5];
-	acpi_buffer buffer = { .length = sizeof(objname),
-			       .pointer = objname };
-
-	status = acpi_get_object_info(handle, &info);
-	if (ACPI_FAILURE(status)) {
-		dbg("%s: failed to get bridge information\n", __FUNCTION__);
-		return AE_OK;		/* continue */
-	}
-
-	info.hardware_id[sizeof(info.hardware_id)-1] = '\0';
-
-	/* TBD use acpi_get_devices() API */
-	if (info.current_status &&
-	    (info.valid & ACPI_VALID_HID) &&
-	    strcmp(info.hardware_id, ACPI_PCI_HOST_HID) == 0) {
-		acpi_get_name(handle, ACPI_SINGLE_NAME, &buffer);
-		dbg("checking PCI-hotplug capable bridges under [%s]\n", objname);
-		add_bridges(handle);
-	}
-	return AE_OK;
-}
-
-
 static int power_on_slot (struct acpiphp_slot *slot)
 {
 	acpi_status status;
@@ -1189,6 +1160,14 @@
 	}
 }
 
+static struct acpi_driver acpi_pci_hp_driver = {
+	.name =		"pci_hp",
+	.class =	"",
+	.ids =		ACPI_PCI_HOST_HID,
+	.ops =	{
+		.add =	add_bridge,
+	},
+};
 
 /**
  * acpiphp_glue_init - initializes all PCI hotplug - ACPI glue data structures
@@ -1196,19 +1175,15 @@
  */
 int acpiphp_glue_init (void)
 {
-	acpi_status status;
+	int num;
 
 	if (list_empty(&pci_root_buses))
 		return -1;
 
-	status = acpi_walk_namespace(ACPI_TYPE_DEVICE, ACPI_ROOT_OBJECT,
-				     ACPI_UINT32_MAX, find_host_bridge,
-				     NULL, NULL);
+	num = acpi_bus_register_driver(&acpi_pci_hp_driver);
 
-	if (ACPI_FAILURE(status)) {
-		err("%s: acpi_walk_namespace() failed\n", __FUNCTION__);
+	if (num <= 0)
 		return -1;
-	}
 
 	return 0;
 }